<?php
/**
 * 
 * @author HelloWorld
 * 2014-9-29
 * UTF-8
 */
class Lib_Redis_Set extends Lib_Redis_Base {
	function __construct() {
	}
	/**
	 * 增加一个set数据
	 * @param unknown $key
	 * @param unknown $value
	 */
	public static function sAdd($key, $value) {
		self::_init ();
		return self::$_redis->sAdd ( self::$prefix.$key, $value );
	}

	/**
	 * 获得set数据
	 * @param unknown $key
	 */
	public static function sMembers($key) {
		self::_init ();
		return self::$_redis->sMembers ( self::$prefix.$key );
	}

	/**
	 * 移除一个set数据
	 * @param unknown $key
	 * @param unknown $value
	 */
	public static function sRem($key, $value) {
		self::_init ();
		return self::$_redis->sRem ( self::$prefix.$key, $value );
	}

	/**
	 * 获得集合中的元素数量
	 * @param unknown $key
	 */
	public static function sCard($key){
		self::_init();
		return self::$_redis->scard(self::$prefix.$key);
	}
	
	/**
	 * 获得交集
	 * @param array $keyArr
	 */
	public static function sInter(array $keyArr){
		self::_init();
		$res = call_user_func_array(array(self::$_redis,'sInter'),$keyArr);
		return $res;
	}
	
	public static function sScan($key, $pattern, $count=10){
		self::_init();
		self::$_redis->setOption(Redis::OPT_SCAN, Redis::SCAN_RETRY);
		$return_res = array();
		$iterator = null;
		while($arr_mems = self::$_redis->sscan(self::$prefix.$key, $iterator, $pattern)){
			$full_res = false;
			foreach ($arr_mems as $str_mem){
				$return_res []= $str_mem;
				if(count($return_res)==$count){
					$full_res = true;
					break;
				}
			}
			if($full_res){
				break;
			}
		}
		return $return_res;
	}

    /**
     * 判断成员元素是否是集合的成员。
     * @param $key
     * @param $value
     * @return mixed
     * @throws Exception
     */
    public static function sIsMember( $key, $value ) {
        self::_init ();
        return self::$_redis->sIsMember( self::$prefix.$key, $value );
    }

}


